/**
 * @Author lx
 * @Version V 0.0.1
 * @Date 2023/11/08
 * @Description 项目配置
 */
const defaultSettings = require('./src/settings.js');
const name = process.env.VUE_APP_ENV_TITLE || defaultSettings.title || ''; // 标题
const port = process.env.VUE_APP_ENV_PORT || 8080; // 端口
const path = require('path');
function resolve(dir) { return path.join(__dirname, dir); }
module.exports = {
  // 部署应用包时的基本 URL
  publicPath: './',
  // 构建时的输出目录
  outputDir: 'build',
  // 放置静态资源的目录
  assetsDir: 'static',
  // html的输出路径
  indexPath: 'index.html',
  // 文件名哈希
  filenameHashing: true,
  //用于多页配置，默认是 undefined
  pages:{
    index:{
      // page 的入口文件
      entry: 'src/main.js',
      // 模板文件
      template: 'public/index.html',
      // 在dist的输出文件
      filename: 'index.html',
      // 页面 title
      title: name,
      // 在这个页面中包含的块
      chunks: [ 'chunk-vendors', 'chunk-common', 'index' ]
    }
  },
  // 是否在保存的时候使用 `eslint-loader` 进行检查。
  lintOnSave: true,
  // 是否使用带有浏览器内编译器的完整构建版本
  runtimeCompiler: false,
  // babel-loader 默认会跳过 node_modules 依赖。
  // 如果transpileDependencies为true或为正则，接着看package.json里的browserslist是否处在低级浏览器范围，如果处在低级浏览器范围内，那么会把node_modules里用得到的高级语法进行babel编译，如果transpileDependencies为false,则会把node_modules里用到的高级语法原封不动的打包(无视browserslist范围)，会造成在低级浏览器访问报错的情况，总结;transpileDependencies为false,则原封不动的打包进bundle,否则，根据browserslist情况决定是否需要打polyfill
  transpileDependencies: [],
  // 是否为生产环境构建生成 source map
  productionSourceMap: false,
  // 设置生成的HTML中<link rel="stylesheet">和<script>标签的crossorigin属性。
  crossorigin: '',
  // 在生成的HTML中的<link rel="stylesheet">和<script>标签上启用Subresource Integrity(SRI)。
  integrity: false,
  // 调整内部的webpack配置(Object | Function)
  configureWebpack: config => {
    config.resolve.alias;
    config.devtool = 'source-map';
    // 文件夹名简写
    config.resolve = {
      alias: {
        '@': resolve('src'),
        '@api':resolve('src/api'),
        '@ass':resolve('src/assets'),
        '@com':resolve('src/components'),
        '@rou':resolve('src/router'),
        '@sto':resolve('src/store'),
        '@sty':resolve('src/styles'),
        '@uti':resolve('src/utils'),
      }
    };
    // 提取第三方依赖包，防止第三方依赖被打包
    config.externals = {
      BMapGL:'BMapGL' // 百度地图
    };
    // 禁止控制台输出
    // if(process.env.NODE_ENV === 'production') config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
  },
  chainWebpack: config => {
    config.output.filename('js/[name].[hash:16].js'); //hash值设置
    config.output.chunkFilename('js/[id].[hash:16].js');
    // config.output.filename('css/[name].[hash:16].css'); //hash值设置
  },
  // 配置 webpack-dev-server
  devServer: {
    host: '0.0.0.0',
    public:'',
    https: false,
    hotOnly: false,
    open: true,
    port: port,
    proxy: {
      '/api': {
        target: process.env.VUE_APP_URL,
        changeOrigin: true,
        secure: false,
        ws: true,
        pathRewrite: {
          '^/api': ''
        }
      },
      '/web/test-upload/': {
        target: ' https://srwebapp.oss-cn-beijing.aliyuncs.com', //对应自己的接口
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '^/web/test-upload/': ''
        }
      },
      '/aliyun/oss/policy': {
        target: 'http://194.194.194.167:8088/aliyun/oss/policy',
        changeOrigin: true,
        secure: false,
        ws: true,
        pathRewrite: {
          '^/aliyun/oss/policy': ''
        }
      },
      '/st_shzz/pub/ajaxMgrEngine.as': {
        target: 'https://shzz.mzt.zj.gov.cn/st_shzz/pub/ajaxMgrEngine.as',
        changeOrigin: true,
        secure: false,
        ws: true,
        pathRewrite: {
          '^/st_shzz/pub/ajaxMgrEngine.as': ''
        }
      },
    },
  },
  css: {
    extract: true,
    // 是否开启 CSS source map
    sourceMap: false,
    loaderOptions:{
      css: {
        // 这里的选项会传递给 css-loader
        importLoaders: 2,
      },
      // postcss: { /*这里的选项会传递给 postcss-loader*/ },
      // sass: { /*这里的选项会传递给 sass-loader*/ },
      // less: { /*这里的选项会传递给 less-loader*/ },
    },
    // 为所有的 CSS 及其预处理文件开启 CSS Modules
    // modules: false
  },
  // 在生产环境下为 Babel 和 TypeScript 使用 `thread-loader`(在多核机器下会默认开启)
  parallel: require('os').cpus().length > 1,
  // PWA 插件 （该插件加入的 service worker 只会在生产环境下 (即只在运行 npm run build 或 yarn build 时) 开启。在开发环境下开启 service worker 并不推荐，因为它会导致之前的缓存资源被使用而未包含最新的本地改变。）
  pwa: {},
  // 三方插件的选项
  pluginOptions: {}
};
